// utils/auth.js
import request from './request.js';

export default {
  // 检查用户是否已登录
  checkLogin() {
    const token = uni.getStorageSync('token');
    console.log('检查登录状态 - Token:', token);
    return !!token;
  },
  
  // 保存用户token
  saveToken(token) {
    console.log('保存Token:', token);
    uni.setStorageSync('token', token);
  },
  
  // 清除用户token
  clearToken() {
    console.log('清除Token');
    uni.removeStorageSync('token');
  },
  
  // 白名单页面（不需要登录）
  noAuthPages: [
    '/pages/login/login' // 登录页不需要登录
  ],
};

const authUtil = {
  /**
   * 检查页面是否需要登录
   * @param {string} url 页面路径
   * @returns {boolean} 是否需要登录
   */
  needAuth(url) {
    // 如果在白名单中，则不需要登录
    return !this.noAuthPages.some(page => {
      // 如果是精确匹配直接返回
      if (page === url) return true;
      
      // 如果是路径前缀匹配也返回true
      return url.startsWith(page);
    });
  }
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export function isLoggedIn() {
  const token = uni.getStorageSync('token');
  console.log('检查用户是否已登录 - Token:', token);
  return !!token;
}

/**
 * 获取用户信息
 * @returns {object|null} 用户信息
 */
export function getUserInfo() {
  try {
    const userInfo = uni.getStorageSync('userInfo');
    console.log('获取用户信息:', userInfo);
    return userInfo ? JSON.parse(userInfo) : null;
  } catch (e) {
    console.error('解析用户信息失败:', e);
    return null;
  }
}

/**
 * 保存用户信息
 * @param {string} token 用户token
 * @param {object} userInfo 用户信息
 */
export function saveUserInfo(token, userInfo) {
  console.log('保存用户信息 - Token:', token, '用户信息:', userInfo);
  uni.setStorageSync('token', token);
  uni.setStorageSync('userInfo', JSON.stringify(userInfo));
  
  // 验证是否保存成功
  const storedToken = uni.getStorageSync('token');
  const storedUserInfo = uni.getStorageSync('userInfo');
  console.log('验证存储 - Token:', storedToken, '用户信息:', storedUserInfo);
}

/**
 * 清除用户信息
 */
export function clearUserInfo() {
  console.log('清除用户信息');
  uni.removeStorageSync('token');
  uni.removeStorageSync('userInfo');
}

/**
 * 检查token是否为JWT格式
 * @param {string} token 待检查的token
 * @returns {boolean} 是否为JWT格式
 */
export function isJwtToken(token) {
  if (!token || typeof token !== 'string') {
    return false;
  }
  
  // JWT格式: 由三部分组成，用点分隔
  return token.includes('.') && token.split('.').length === 3;
}

/**
 * 解析JWT token中的用户信息
 * @param {string} token JWT token
 * @returns {object|null} 解析出的用户信息
 */
export function parseJwtToken(token) {
  if (!isJwtToken(token)) {
    console.warn('Token不是有效的JWT格式');
    return null;
  }
  
  try {
    // 解析JWT payload部分
    const payload = JSON.parse(atob(token.split('.')[1]));
    console.log('解析JWT payload:', payload);
    return payload;
  } catch (error) {
    console.error('解析JWT token失败:', error);
    return null;
  }
}

// 不再需要单独的isCustomerPage函数，已整合到白名单中

/**
 * 检查是否为需要登录的页面
 * @param {string} url 页面路径
 * @returns {boolean} 是否需要登录
 */
export function isAuthRequired(url) {
  // 客户端工单创建页面需要登录
  if (url.startsWith('/pages/customer/create-ticket/')) {
    return true;
  }
  
  // 工单页面需要登录
  if (url.startsWith('/pages/ticket/')) {
    return true;
  }
  
  // 检查是否在白名单中
  return !authUtil.noAuthPages.some(page => {
    // 如果是精确匹配直接返回
    if (page === url) return true;
    
    // 如果是路径前缀匹配也返回true
    return url.startsWith(page);
  });
}